package com_1;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerThread implements Runnable {//定义一个severthread实现了Rannable接口，所以就可以多线程操作
    private Socket sc;//定义一个socket变量

    public ServerThread(Socket sc) {//有参数构造方法将socket作为参数
        this.sc = sc;//将socket的对象赋值给本类的成员变量，以便变量进行到本类的方法中进行操作
    }

    @Override
    public void run() {//重写了Rannable接口中方法
        try {//使用trycatch进行捕获异常
            BufferedReader br = new BufferedReader(new InputStreamReader(sc.getInputStream()));
            //创建字符缓冲输入流读取客户端发送的数据
            int count = 1;//定义计数器变量
            File file = new File("UDP\\s.[" + count + "].text");
            //创建读取数据后需要写入数据路径名称
            while (file.exists()) {//如果路径已经存在了的话计数器会增加1
                count++;//
                file = new File("UDP\\s.[" + count + "].text");
                //计数器增加后再次创建新的路径名称，也就是多线程操作后会产生多个被复制的文件夹
            }
            BufferedWriter bw = new BufferedWriter(new FileWriter(file));
            //创建字符输出流以便写出字符缓冲输入流读取的数据
            String line;//定义字符缓冲输入流读取数据的行数
            while ((line = br.readLine()) != null) {//使用while循环进行读取数据
                bw.write(line);//使用新创建的字符输出流将读取的数据写入到指定的文件目录下
                bw.newLine();//换行
                bw.flush();//刷新
            }
            BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(sc.getOutputStream()));
            //在服务器端接受到客户端发送的数据后，创建字符缓冲输出流做出反馈，也就是给客户端发送东西
            bw1.write("接受到数据了");//使用write方法进行输出数据
            bw1.flush();//刷新
            br.close();//关闭资源
            bw.close();//关闭资源
        } catch (IOException e) {//捕获异常
            e.printStackTrace();//捕获异常
        }
    }
}

